package club.dmyang.service;

import club.dmyang.entity.ArchiveCount;
import club.dmyang.entity.Article;
import club.dmyang.entity.ArticleWithBLOBs;
import club.dmyang.entity.Tag;

import java.util.List;
import java.util.Map;

/**
 * Created by brss on 2018/7/14.
 */
public interface ArticleService {

    /**
     * 查询表中category_id=categoryId的文章的数目
     * (用于删除分类时，判断某分类下是否有文章)
     */
    public Integer findNumByCategoryId(Integer categoryId);
    /**
     * 查询tag_article表中，tid=tagId的数目
     * (用于删除标签时，判断某标签下是否有文章)
     */
    public Integer findNumByTagId(Integer tagId);

    /**
     * 查询一篇文章
     * @param aid
     * @return
     */
    public ArticleWithBLOBs findOneArticle(Integer aid);

    /**
     * 根据页数(page)和每页容量(limit)查询文章列表
     *
     * @param page
     * @param limit
     * @return
     */
    public List<Article> findArticlesByPageAndLimit(Integer page, Integer limit);


    /**
     * 查询数据库中所有文章的个数
     * （用于分页插件计算一个有多少页）
     * @return
     */
    public int findAllNums();

    /**
     * 根据页数(page)和每页容量(limit)查询【最新】文章列表
     *
     * @param page
     * @param limit
     * @return
     */
    public List<Article> findNewestArticlesByPageAndLimit(Integer page, Integer limit);

    /**
     * 由主键更新文章（选择性）
     * @param article
     * @return
     */
    public int updateByPkSeletive(ArticleWithBLOBs article);

    /**
     * 根据标分类id查找文章（分页）
     * @param cid
     * @param start
     * @param Limit
     * @return
     */
    List<Article> findByCidWithPgAndLimit(Integer cid,
                                          Integer page,
                                          Integer Limit);

    /**
     * 根据标签Id查找文章（分页）
     * @param tid
     * @param start
     * @param Limit
     * @return
     */
    List<Article> findByTidWithPgAndLimit(Integer tid,
                                          Integer page,
                                          Integer Limit);

    /**
     * 点赞
     * @param aid
     * @return
     */
    int voteOneArticle(Integer aid);

    /**
     * 获取归档信息
     * key : 对象
     * value : result list
     * @return
     */
    Map<String,List<Article>> getArchive();

    /**
     * 由关键字搜索文章
     * @param keyword
     * @return
     */
    List<Article> searchByKeyword(String keyword,Integer page,Integer limit);

    /**
     * 查询含有这个关键字的总文章个数（用于计算分页数）
     * @param keyword
     * @return
     */
    int findNumByKeyword(String keyword);

}
